import { invoke } from '@tauri-apps/api/core'
import { rsaDecrypt } from './crypto'

/**
 * 获取机器码
 */
export async function getMachineId(): Promise<string> {
  try {
    return await invoke<string>('get_machine_id')
  } catch (error) {
    console.error('获取机器码失败:', error)
    return 'unknown-machine-id'
  }
}

/**
 * 读取授权文件内容
 */
export async function readAuthFile(): Promise<string> {
  try {
    return await invoke<string>('read_auth_file')
  } catch (error) {
    console.error('读取授权文件失败:', error)
    return ''
  }
}

/**
 * 写入授权文件
 */
export async function writeAuthFile(content: string): Promise<void> {
  try {
    await invoke('write_auth_file', { content })
  } catch (error) {
    console.error('写入授权文件失败:', error)
    throw error
  }
}

/**
 * 验证软件授权
 */
export async function verifyLicense(): Promise<boolean> {
  try {
    // 读取授权文件
    const authContent = await readAuthFile()
    if (!authContent.trim()) {
      return false // 授权文件为空
    }

    // 解密授权内容
    let decryptedContent: string
    try {
      decryptedContent = rsaDecrypt(authContent)
      if (!decryptedContent) {
        return false // 解密失败
      }
    } catch (decryptError) {
      console.error('授权内容解密失败:', decryptError)
      return false
    }

    // 获取当前机器码
    const machineId = await getMachineId()
    
    // 比对机器码
    return decryptedContent === machineId
  } catch (error) {
    console.error('授权验证失败:', error)
    return false
  }
}

/**
 * 激活软件授权
 */
export async function activateLicense(licenseKey: string): Promise<boolean> {
  try {
    // 解密授权码验证格式
    let decryptedContent: string
    try {
      decryptedContent = rsaDecrypt(licenseKey)
      if (!decryptedContent) {
        return false // 解密失败
      }
    } catch (decryptError) {
      console.error('授权码解密失败:', decryptError)
      return false
    }

    // 获取当前机器码
    const machineId = await getMachineId()
    
    // 验证授权码是否匹配当前机器
    if (decryptedContent !== machineId) {
      return false // 授权码不匹配当前机器
    }

    // 保存授权文件
    await writeAuthFile(licenseKey)
    return true
  } catch (error) {
    console.error('激活授权失败:', error)
    return false
  }
}